using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace MyWebApi.Api.Repository
{
    // 定义一个泛型接口（T就相当于一个占位符，暂时还不知道是什么，用的时候传值：private IRepository<Users> _usersRespository）
    public interface IRepository<T>
    {
        // 一个IQueryable<T>泛型接口，接口使查询成为多态查询。
        IQueryable<T> Table { get; }

        // 根据id指定实体
        T GetById(int id);

        // 使用实体对象，插入数据
        void Insert(T entity);
        // 使用实体对象，插入数据(异步)
        Task InsertAsync(T entity);

        // 使用实体对象，插入若干数据
        void InsertBulk(IEnumerable<T> entities);
        // 使用实体对象，插入若干数据(异步)
        Task InsertBulkAsync(IEnumerable<T> entities);

        // 使用实体对象，更新数据
        void Update(T entity);
        // 使用实体对象，更新若干数据
        void UpdateBulk(IEnumerable<T> entities);

        // 使用实体对象，删除数据
        void Delete(int id);
    }

}